home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / lang / c-part1 / 8381 < prev    next >
Encoding:
Internet Message Format  |  1996-08-05  |  2.5 KB

  1. Path: newshost.lanl.gov!tanmoy
  2. From: tanmoy@qcd.lanl.gov (Tanmoy Bhattacharya)
  3. Newsgroups: comp.lang.c
  4. Subject: Re: need for function prototypes
  5. Date: 01 Mar 1996 16:10:50 GMT
  6. Organization: Los Alamos National Laboratory
  7. Message-ID: <TANMOY.96Mar1091050@qcd.lanl.gov>
  8. References: <31333401.7D03@stat.uni-muenchen.de> <4h56juINNmd0@anvil.ugrad.cs.ubc.ca>
  9. NNTP-Posting-Host: qcd.lanl.gov
  10. Mime-Version: 1.0
  11. Content-Type: text
  12. In-reply-to: c2a192@ugrad.cs.ubc.ca's message of 29 Feb 1996 13:42:22 -0800
  13.  
  14. In article <4h56juINNmd0@anvil.ugrad.cs.ubc.ca>
  15. c2a192@ugrad.cs.ubc.ca (Kazimir Kylheku) writes:
  16.  
  17. KK: The function definition serves as a prototype, when you are ``down
  18. wind'' in 
  19. KK: the scope---that is, if the function you are calling is defined before the
  20. KK: place where you are calling it. This is not a case of not having a
  21. prototype. 
  22.  
  23. I know what the poster meant by these statements, but technically this
  24. is incorrect. There are two kinds of function definitions: with and
  25. without prototypes. Thus
  26.  
  27. char f(x) char x; {/* ... */}        /* Non-prototyped definition */
  28. char g(char x)    {/* ... */}        /* Prototyped definition */
  29.  
  30. The former does not serve as a prototype: After these, f(1,2) leads to
  31. undefined behaviour (i.e. it is wrong, but the compiler does not
  32. _have_ to diagnose it), whereas g(1,2) leads to a constraint violation
  33. which needs to be diagnosed. Note that nothing prohibits the compiler
  34. from diagnosing the undefined behaviour in incorrect calls to f, but
  35. the standard does not require the compiler to do so. Undefined
  36. behaviour also means that the implementation may or may not define a
  37. meaning for it.
  38.  
  39. Furthermore, the parameter passing convention of f and g may be
  40. different. The implementation must behave as if f was prototyped char
  41. f(int x), where the x will be narrowed in f (i.e. the caller will pass
  42. an int, and the receiver will narrow it), whereas g is prototyped char
  43. g(char x), i.e. the caller will pass a char. 
  44.  
  45. And, all declarations, including definitions, are seen only ``down
  46. wind''. 
  47.  
  48. Cheers
  49. Tanmoy
  50. --
  51. tanmoy@qcd.lanl.gov(128.165.23.46) DECNET: BETA::"tanmoy@lanl.gov"(1.218=1242)
  52. Tanmoy Bhattacharya O:T-8(MS B285)LANL,NM87545 H:#9,3000,Trinity Drive,NM87544
  53. Others see <gopher://yaleinfo.yale.edu:7700/00/Internet-People/internet-mail>,
  54. <http://alpha.acast.nova.edu/cgi-bin/inmgq.pl>or<ftp://csd4.csd.uwm.edu/pub/
  55. internetwork-mail-guide>. -- <http://nqcd.lanl.gov/people/tanmoy/tanmoy.html>
  56. fax: 1 (505) 665 3003   voice: 1 (505) 665 4733    [ Home: 1 (505) 662 5596 ]
  57.